home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CD ROM Paradise Collection 4
/
CD ROM Paradise Collection 4 1995 Nov.iso
/
program
/
swagg_m.zip
/
GRAPHICS.SWG
/
0104_Cannon Ball Animation.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1994-08-24
|
2KB
|
107 lines
{
JG> This coding works fine, I would like to make the ball travel
JG> smoother. When it travels in the air, its kinda "Chunky"
JG> How could you make it so that the computer calculates the next
JG> point and make it travel the ball to that point one pixel at a
JG> time? Cause with this structure, it kinda "Jumps there"
Try next code and tell me ...
}
Program FallingBall;
{ Written by Luis Mezquita Raya }
{$x+}
uses Crt,
Graph;
Procedure Init;
var cg,mg:integer;
begin
cg:=Detect;
InitGraph(cg,mg,'\turbo\tp');
end;
Procedure Wait(msk:byte); assembler;
asm
mov dx,3dah
@Loop1: in al,dx
test al,msk
jz @Loop1
@Loop2: in al,dx
test al,msk
jnz @Loop2
end;
Procedure Calc;
var angle,power,gravity,a1,a2,a3,y0,n:real;
size:word;
ball,mask,bkg:pointer;
x,y,ox,oy,pause:integer;
begin
ClearViewPort;
size:=ImageSize(0,0,20,20);
GetMem(ball,size);
GetMem(mask,size);
GetMem(bkg,size);
SetFillStyle(SolidFill,Yellow); { Draw a ball }
Circle(10,10,8);
FloodFill(10,10,White);
GetImage(0,0,20,20,ball^); { Get the ball }
SetFillStyle(SolidFill,White); { Draw ball's mask }
Bar(0,0,20,20);
SetFillStyle(SolidFill,Black);
SetColor(Black);
Circle(10,10,10);
FloodFill(10,10,Black);
GetImage(0,0,20,20,mask^); { Get the mask }
ClearViewPort; { Draw a background }
SetFillStyle(CloseDotFill,LightBlue);
Bar(0,0,GetMaxX,GetMaxY);
angle:=35; { Init vars }
power:=10;
gravity:=0.1;
y0:=200;
ox:=-1;
n:=0;
while n<80 do { Main loop }
begin
a1:=cos(angle*pi/180)*power*n;
a2:=y0-sin(angle*pi/180)*power*n;
a3:=gravity*n*n;
x:=Round(a1);
y:=Round(a2+a3);
Wait(8); { Wait retrace }
for pause:=0 to 399 do Wait(1); { Wait scan line }
if ox<>-1 { Restore old background }
then PutImage(ox,oy,bkg^,CopyPut);
GetImage(x,y,x+20,y+20,bkg^); { Save background }
PutImage(x,y,mask^,AndPut); { Put mask }
PutImage(x,y,ball^,OrPut); { Put ball }
ox:=x;
oy:=y;
n:=n+0.2;
end;
FreeMem(ball,size);
FreeMem(mask,size);
end;
begin
Init;
Calc;
ReadKey;
CloseGraph;
end.